<?php
require_once('DataAccess.php');
require_once('Empenho.php');

/**
Interface DAO de Empenho. Estes mï¿½todos Nï¿½O devem ser chamados diretamente.
Ao invï¿½s disso devem ser chamados por mï¿½todos da classe Programa.
*/

class EmpenhoDAO
{
      private $database;

      public function __construct( )
      {
               $this->database = DataAccess::getConnection();
      }
      
      public function  CadastrarEmpenho( $empenho )
      {
      	      		      		      	
      	$consulta = $this->database->Fetch("BEGIN");
      	
      	if( $consulta )
      	{
      		$reserva = $empenho->reserva;
      		$fornecedor = $empenho->fornecedor;
      		$consulta = $this->database->Fetch("INSERT into t_empenho (t_reserva_id, num_nota_empenho, valor, t_fornecedor_id, situacao, srp )
      											VALUES('$reserva->id','$empenho->numNotaEmpenho','$empenho->valorEmpenho','$fornecedor->id','$empenho->situacao','$empenho->srp')");
      		if ( $consulta )
      		{
      			$this->database->Fetch("COMMIT");
      			return TRUE;
      		}
      		else
      		{
      			$this->database->Fetch("ROLLBACK");
      		}
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
      	}
			
			
      }
		
      
      public function AlterarEmpenho( $empenho )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	
      	if( $consulta )
      	{
      		$reserva = $empenho->reserva;
      		$fornecedor = $empenho->fornecedor;
      		$consulta = $this->database->Fetch("UPDATE t_empenho 
      											SET t_reserva_id = '$reserva->id' ,
      											num_nota_empenho = '$empenho->numNotaEmpenho',
      											valor = '$empenho->valorEmpenho',
      											situacao = '$empenho->situacao',
      											srp = '$empenho->srp', 
      											t_fornecedor_id ='$fornecedor->id'     											
      											where id = '$empenho->id'");
      		if ( $consulta )
      		{
      			$this->database->Fetch("COMMIT");
      			return TRUE;
      		}
      		else
      		{
      			$this->database->Fetch("ROLLBACK");
      		}
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
      	}
      }
      
      public function ExcluirEmpenho( $empenhoId )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	
      	if( $consulta )
      	{

                $consulta = $this->database->Fetch("DELETE FROM t_reforco_empenho where t_empenho_id = '$empenhoId'");
      		
      		
      		if ( $consulta )
      		{

                        $consulta = $this->database->Fetch("Delete from t_empenho where id = '$empenhoId'");
                        
                        if($consulta){

                            $this->database->Fetch("COMMIT");
                            return true;
                        }else{

                            $this->database->Fetch("ROLLBACK");
                            return false;
                        }
      		}
      		else
      		{

                        $this->database->Fetch("ROLLBACK");
                        return false;
      		}
      	}
      	else
      	{

                $this->database->Fetch("ROLLBACK");
                return false;
      	}
      	
      }
      
      public function ReforcarEmpenho( $empenhoId,$valor,$descricao )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	
      	if( $consulta )
      	{      		
      		$consulta = $this->database->Fetch("INSERT INTO t_reforco_empenho(t_empenho_id, valor_reforco, descricao)
      											VALUES('$empenhoId','$valor','$descricao')");
      		 
      		if ( $consulta )
      		{
      			$this->database->Fetch("COMMIT");
      			return TRUE;
      		}
      		else
      		{
      			$this->database->Fetch("ROLLBACK");
      			return FALSE;
      		}
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
      		return FALSE;
      	}
      }
      
      public function AnulacaoEmpenho( $empenhoId ,$tipoAnulacao, $valor ,$descricao )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	
      	if( $consulta )
      	{      		
      		$consulta = $this->database->Fetch("INSERT INTO t_anulacao_empenho(t_empenho_id,tipo_anulacao, valor_anulacao, descricao)
      											VALUES('$empenhoId','$tipoAnulacao','$valor','$descricao')");
      		 
      		if ( $consulta )
      		{
      			$this->database->Fetch("COMMIT");
      			return TRUE;
      		}
      		else
      		{
      			$this->database->Fetch("ROLLBACK");
      			return FALSE;
      		}
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
      		return FALSE;
      	}
      }
      
      /**
      Busca na tabela t_empenhos por todos os registros de empenho que possuam chave-estrangeira $reservaId.
      Para cada registro encontrado serï¿½ criada uma instï¿½ncia de Empenho com os valores das colunas do registro em questï¿½o.
      Por fim, caso sejam encontrados registros, todas as instï¿½ncias criadas serï¿½o inseridas dentro de um array que serï¿½ retornado por este mï¿½todo.
      Caso contrï¿½rio, serï¿½ retornado FALSE indicando que nï¿½o foi encontrado nenhum registro.
      @reservaId - Chave-primï¿½ria da reserva ao qual o Empenho esta vinculado.
      @return - Retorna um array de objetos do tipo Programa. Caso nï¿½o encontre nenhum resultado, retorna FALSE.
     */
      public function LoadEmpenhos( $reservaId )
      {
             $consulta = $this->database->Fetch(" SELECT * FROM t_empenho WHERE t_reserva_id = '$reservaId'");
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
                       $empenho = new Empenho();
                       $empenho->id = $rows[$i]['id'];                       
                       $empenho->numNotaEmpenho = $rows[$i]['num_nota_empenho'];
                       $r = new Reserva();
                       $reserva = $r->CarregarReserva($rows[$i]['t_reserva_id']);
                       $empenho->reserva = $reserva;
                       $f = new Fornecedor();
                       $empenho->fornecedor = $f->CarregarFornecedor($rows[$i]['t_fornecedor_id']);
                       $empenho->situacao = $rows[$i]['situacao'];
                       $empenho->valorEmpenho = $rows[$i]['valor'];
                       $empenho->dataEmpenho = $rows[$i]['data_empenho'];
                       $empenho->srp         = $rows[$i]['srp'];
                       
             			

                       $objetos[] = $empenho;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
      public function LoadEmpenhosPorProcesso( $processo )
      {
             $consulta = $this->database->Fetch(" SELECT e . * , r.processo FROM `t_empenho` e, t_reserva r
												  WHERE r.processo ='$processo' AND e.t_reserva_id = r.id");
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
         			   $empenho = new Empenho();
                       $empenho->id = $rows[$i]['id'];                       
                       $empenho->numNotaEmpenho = $rows[$i]['num_nota_empenho'];
                       $r = new Reserva();
                       $reserva = $r->CarregarReserva($rows[$i]['t_reserva_id']);
                       $empenho->reserva = $reserva;
                       $empenho->valorEmpenho = $rows[$i]['valor'];
					   $empenho->situacao = $rows[$i]['situacao'];                       
                       $empenho->dataEmpenho = $rows[$i]['data_empenho'];
                       $empenho->srp         = $rows[$i]['srp'];                       
                       $f = new Fornecedor();
                       $empenho->fornecedor = $f->CarregarFornecedor($rows[$i]['t_fornecedor_id']);                       
                            
                       $objetos[] = $empenho;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }

      public function LoadEmpenhosPorUnidade( $unidadeId )
      {
             $consulta = $this->database->Fetch(" SELECT e. * , r.t_campus_id FROM t_empenho e, t_reserva r
												WHERE r.t_campus_id ='$unidadeId' AND e.t_reserva_id = r.id
                                                                                                 order by r.t_campus_id ,r.t_rateio_id");
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
         			   $empenho = new Empenho();
                       $empenho->id = $rows[$i]['id'];                       
                       $empenho->numNotaEmpenho = $rows[$i]['num_nota_empenho'];
                       $r = new Reserva();
                       $reserva = $r->CarregarReserva($rows[$i]['t_reserva_id']);
                       $empenho->reserva = $reserva;
                       $empenho->valorEmpenho = $rows[$i]['valor'];
					   $empenho->situacao = $rows[$i]['situacao'];                       
                       $empenho->dataEmpenho = $rows[$i]['data_empenho'];
                       $empenho->srp         = $rows[$i]['srp'];                       
                       $f = new Fornecedor();
                       $empenho->fornecedor = $f->CarregarFornecedor($rows[$i]['t_fornecedor_id']);                       
                            
                       $objetos[] = $empenho;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }

      public function LoadEmpenhosPorFonteUnidade( $fonteId, $unidadeId )
      {
             $consulta = $this->database->Fetch("SELECT e. * , r.t_campus_id FROM t_empenho e, t_reserva r, t_rateio rat
                                                WHERE r.t_campus_id ='$unidadeId' AND e.t_reserva_id = r.id AND r.t_rateio_id = rat.id AND rat.t_fonte_id ='$fonteId'" );
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
         			   $empenho = new Empenho();
                       $empenho->id = $rows[$i]['id'];                       
                       $empenho->numNotaEmpenho = $rows[$i]['num_nota_empenho'];
                       $r = new Reserva();
                       $reserva = $r->CarregarReserva($rows[$i]['t_reserva_id']);
                       $empenho->reserva = $reserva;
                       $empenho->valorEmpenho = $rows[$i]['valor'];
					   $empenho->situacao = $rows[$i]['situacao'];                       
                       $empenho->dataEmpenho = $rows[$i]['data_empenho'];
                       $empenho->srp         = $rows[$i]['srp'];                       
                       $f = new Fornecedor();
                       $empenho->fornecedor = $f->CarregarFornecedor($rows[$i]['t_fornecedor_id']);                       
                            
                       $objetos[] = $empenho;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
      public function LoadEmpenhosPorNumNotaEmpenho( $numNotaEmpenho )
      {
             $consulta = $this->database->Fetch(" SELECT * 
											FROM t_empenho 
											WHERE num_nota_empenho = '$numNotaEmpenho'");
             
             if( $consulta != FALSE )
             {
             	
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
         			   $empenho = new Empenho();
                       $empenho->id = $rows[$i]['id'];                                              
                       $empenho->numNotaEmpenho = $rows[$i]['num_nota_empenho'];
                       $r = new Reserva();
                       $reserva = $r->CarregarReserva($rows[$i]['t_reserva_id']);
                       $empenho->reserva = $reserva;
                       $f = new Fornecedor();
                       $empenho->fornecedor = $f->CarregarFornecedor($rows[$i]['t_fornecedor_id']);
                       $empenho->situacao = $rows[$i]['situacao'];
                       $empenho->valorEmpenho = $rows[$i]['valor'];
                       $empenho->dataEmpenho = $rows[$i]['data_empenho'];
                       $empenho->srp         = $rows[$i]['srp'];
              
                       $objetos[] = $empenho;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
      public function LoadEmpenho( $id )
      {
             $consulta = $this->database->Fetch(" SELECT * 
											FROM t_empenho 
											WHERE id = '$id'");
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
         			   $empenho = new Empenho();
                       $empenho->id = $rows[0]['id'];                       
                       $empenho->numNotaEmpenho = $rows[0]['num_nota_empenho'];
                       $r = new Reserva();
                       $reserva = $r->CarregarReserva($rows[0]['t_reserva_id']);
                       $empenho->reserva = $reserva;
                       $f = new Fornecedor();
                       $empenho->fornecedor = $f->CarregarFornecedor($rows[$i]['t_fornecedor_id']);
                       $empenho->situacao = $rows[0]['situacao'];
                       $empenho->valorEmpenho = $rows[0]['valor'];
                       $empenho->dataEmpenho = $rows[0]['data_empenho'];
                       $empenho->srp         = $rows[0]['srp'];
              
                       $objeto = $empenho;
                  

                  return $objeto;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
      public function LoadSaldo( $empenhoId )
      {
               $consulta = $this->database->Fetch("SELECT e.valor, (
									e.valor - + coalesce( r.valor_reforco, 0 ) - coalesce( a.valor_anulacao, 0 )
									) AS saldo_empenho
									FROM t_empenho e
									LEFT JOIN t_reforco_empenho r ON r.t_empenho_id = e.id
									LEFT JOIN t_anulacao_empenho a ON a.t_empenho_id = e.id
									WHERE e.id = $empenhoId ");     
               
               if( $consulta != FALSE )
               {
                   $rows = $this->database->getRow();

                   $empenho = $rows[0]['saldo_empenho'];

                   return $empenho;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                   return FALSE;
             }
      }
      
      public function existeEmpenhoParaReserva($reservaId){
      		$consulta = $this->database->Fetch(" SELECT * FROM t_empenho WHERE t_reserva_id = $reservaId");
             if( $consulta != FALSE && mysql_num_rows($consulta) > 0) //  && mysql_num_rows($consulta) > 0
             {
                 return true;
             }
             else
             {
                 return false;
             }
      }
      
      public function LoadEmpenhosPorFonte( $fonteId )
      {
             $consulta = $this->database->Fetch(" SELECT e. * , r.t_campus_id,rat.t_fonte_id FROM t_empenho e, t_reserva r , t_rateio rat
                                                    WHERE rat.t_fonte_id ='$fonteId' AND e.t_reserva_id = r.id AND r.t_rateio_id = rat.id");
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
         			   $empenho = new Empenho();
                       $empenho->id = $rows[$i]['id'];                       
                       $empenho->numNotaEmpenho = $rows[$i]['num_nota_empenho'];
                       $r = new Reserva();
                       $reserva = $r->CarregarReserva($rows[$i]['t_reserva_id']);
                       $empenho->reserva = $reserva;
                       $empenho->valorEmpenho = $rows[$i]['valor'];
					   $empenho->situacao = $rows[$i]['situacao'];                       
                       $empenho->dataEmpenho = $rows[$i]['data_empenho'];
                       $empenho->srp         = $rows[$i]['srp'];                       
                       $f = new Fornecedor();
                       $empenho->fornecedor = $f->CarregarFornecedor($rows[$i]['t_fornecedor_id']);                       
                            
                       $objetos[] = $empenho;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
}
?>
